Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Stable Roommates Problem</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Stable_Roommates_Problem"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Stable_Roommates_Problem rootpage-Stable_Roommates_Problem skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Stable Roommates Problem</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p>In der <a href="Mathematik" title="Mathematik">Mathematik</a>, den <a href="Wirtschaftswissenschaften" class="mw-redirect" title="Wirtschaftswissenschaften">Wirtschaftswissenschaften</a> und der <a href="Informatik" title="Informatik">Informatik</a>, insbesondere in den Bereichen <a href="Kombinatorik" title="Kombinatorik">Kombinatorik</a>, <a href="Spieltheorie" title="Spieltheorie">Spieltheorie</a> und <a href="Algorithmus" title="Algorithmus">Algorithmen</a>, ist das <b>Stable Roommate Problem</b> (<b>SRP</b>) das Problem, ein <b>stabiles Matching</b> für eine gerade Menge zu finden. Ein <a href="Matching_(Graphentheorie)" title="Matching (Graphentheorie)">Matching</a> ist eine Trennung der Menge in disjunkte Paare („Mitbewohner“). Das Matching ist „stabil“, wenn es keine zwei Elemente gibt, die keine Mitbewohner sind und sich unter dem Matching gegenseitig ihrem Mitbewohner vorziehen. Dies unterscheidet sich vom <a href="Stable_Marriage_Problem" title="Stable Marriage Problem">Stable Marriage Problem</a> dadurch, dass das Stable Roommate Problem das Matching von zwei beliebigen Elementen erlaubt, nicht nur zwischen den Klassen „Männer“ und „Frauen“.
</p><p>Es wird allgemein beschrieben als:
</p>
<dl><dd>In einem bestimmten Fall des Stable Roommate Problems (SRP) ordnet jeder der <i>2n</i> Teilnehmer die anderen in eine strikte Präferenzordnung. Ein Matching ist eine Menge von <i>n</i> <a href="Disjunktion" title="Disjunktion">disjunkten</a> Teilnehmerpaaren. Ein Matching <i>M</i> in einer <a href="Probleminstanz" class="mw-redirect" title="Probleminstanz">Instanz</a> von SRP ist stabil, wenn es keine zwei Teilnehmer <i>x</i> und <i>y</i> gibt, von denen jeder den anderen seinem Partner in <i>M</i> vorzieht. Man sagt, ein solches Paar blockiert <i>M</i> oder ist ein blockierendes Paar in Bezug auf <i>M</i>.</dd></dl>

<div class="mw-heading mw-heading2"><h2 id="Lösung"><span id="L.C3.B6sung"></span>Lösung</h2></div>
<p>Im Gegensatz zum Stable Marriage Problem kann es sein, dass für bestimmte Gruppen von Teilnehmern und deren Präferenzen kein stabiles Matching existiert. Für ein minimales Beispiel einer nicht existierenden stabilen Paarung betrachte vier Personen A, B, C und D, deren Rangliste wie folgt lautet:
</p>
<dl><dd>A:(B,C,D), B:(C,A,D), C:(A,B,D), D:(A,B,C)</dd></dl>
<p>In dieser Rangliste ist jeder der Personen A, B und C für irgendjemanden die am meisten bevorzugte Person. In jeder Lösung <i>muss</i> einer aus A, B oder C mit D und die anderen beiden miteinander ein Paar bilden (zum Beispiel AD und BC), aber für jeden, der mit D zusammenkommt, wird ein anderer Teilnehmer ihn am höchsten bewertet haben, und D's Partner wird wiederum diesen anderen Teilnehmer gegenüber D bevorzugen. In diesem Beispiel ist AC eine passendere Paarung als AD. Aber die notwendige verbleibende Paarung von BD wirft das gleiche Problem auf. Dies zeigt das Fehlen eines stabilen Matchings für diese Teilnehmer und ihre Präferenzen auf.
</p>
<div class="mw-heading mw-heading2"><h2 id="Algorithmus">Algorithmus</h2></div>
<p>Ein effizienter Algorithmus wurde 1985 von Irving<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> vorgestellt.
</p><p>Der Algorithmus wird für jedes Beispiel des Problems bestimmen, ob ein stabiles Matching existiert, und wenn dies der Fall ist, wird er ein solches Matching finden. Der Irving-Algorithmus hat eine <a href="Landau-Symbole" title="Landau-Symbole">O(<i>n</i><sup>2</sup>) Komplexität</a>, vorausgesetzt, geeignete Datenstrukturen werden verwendet, um die notwendige Manipulation der Präferenzlisten und die Identifizierung von Rotationen zu implementieren.
</p><p>Der Algorithmus besteht aus zwei Phasen. In Phase 1 machen die Teilnehmer einander Anträge, auf ähnliche Weise wie beim Gale-Shapley-Algorithmus für das Stable Marriage Problem. Jeder Teilnehmer ordnet die anderen Teilnehmer nach ihren Präferenzen. Dies ergibt eine Präferenzliste – eine geordnete Menge der anderen Teilnehmer. Die Teilnehmer machen dann, der Reihenfolge nach, jeder Person auf ihrer Liste einen Antrag und gehen zur nächsten Person, wenn ihr derzeitiger Antrag abgelehnt wird. Ein Teilnehmer wird einen Antrag ablehnen, wenn er bereits einen Antrag von jemandem hat, den er bevorzugt. Ein Teilnehmer lehnt auch einen zuvor angenommenen Antrag ab, wenn er später einen Antrag erhält, den er bevorzugt. In diesem Fall macht der abgelehnte Teilnehmer der nächsten Person auf seiner Liste einen Antrag, bis ein Antrag erneut angenommen wird. Sollte ein Teilnehmer schließlich von allen anderen Teilnehmern abgelehnt werden, zeigt dies, dass kein stabiles Matching möglich ist. Andernfalls endet Phase 1 damit, dass jede Person einen Antrag von einer der anderen hält.
</p><p>Betrachte zwei Teilnehmer, <i>q</i> und <i>p</i>. Wenn <i>q</i> einen Antrag von <i>p</i> hält, dann entfernen wir aus <i>q</i>'s Liste alle Teilnehmer <i>x</i>, die nach <i>p</i> kommen würden. Symmetrisch entfernen wir für jeden entfernten Teilnehmer <i>x</i>, <i>q</i> aus der Liste von <i>x</i>, sodass <i>q</i> in der Liste von <i>p</i> an erster Stelle steht; und <i>p</i> an der letzten Stelle in <i>q</i>'s Liste, da <i>q</i> und jeder <i>x</i> keine Partner in einem stabilen Matching sein können. Die sich daraus ergebende reduzierte Menge von Präferenzlisten wird als Phase-1-Tabelle bezeichnet. Wenn in dieser Tabelle eine reduzierte Liste leer ist, gibt es kein stabiles Matching. Ansonsten ist die Phase-1-Tabelle eine stabile Tabelle. Eine stabile Tabelle ist definitionsgemäß die Menge von Präferenzlisten aus der Originaltabelle, nachdem Mitglieder aus einer oder mehreren Listen entfernt wurden und die folgenden drei Bedingungen erfüllt sind (wobei reduzierte Liste eine Liste in der stabilen Tabelle bedeutet):
</p><p>(i) <i>p</i> steht an erster Stelle auf <i>q</i>'s reduzierter Liste, dann und nur dann, wenn <i>q</i> an letzter Stelle auf <i>p</i>'s Liste ist.<br>
(ii) <i>p</i> ist nicht auf der reduzierten Liste von <i>q</i> genau dann, wenn <i>q</i> nicht auf <i>p</i>'s ist, genau dann, wenn <i>q</i> die letzte Person auf seiner Liste gegenüber <i>p</i> vorzieht; oder <i>p</i> die letzte Person auf seiner Liste gegenüber <i>q</i> bevorzugt.<br>
(iii) Keine reduzierte Liste ist leer.
</p><p>Stabile Tabellen haben mehrere wichtige Eigenschaften, die zur Rechtfertigung des weiteren Verfahrens verwendet werden:
</p><p>1. Jede stabile Tabelle muss eine Untertabelle der Phase-1-Tabelle sein, wobei die Untertabelle eine Tabelle ist, in der die Präferenzlisten der Untertabelle diejenigen der Übertabelle sind, wobei einige Individuen aus den Listen der jeweils anderen entfernt wurden.
</p><p>2. Wenn in jeder stabilen Tabelle jede reduzierte Liste genau eine Person enthält, dann ergibt die Paarung jeder Person mit der einzelnen Person auf ihrer Liste ein stabiles Matching.
</p><p>3. Wenn die das Stable Roommates Problembeispiel ein stabiles Matching aufweist, gibt es ein stabiles Matching, das in einer der stabilen Tabellen enthalten ist.
</p><p>4. Jede stabile Untertabelle einer stabilen Tabelle und insbesondere jede stabile Untertabelle, die ein stabiles Matching wie in 2 angibt, kann durch eine Sequenz von Rotationseliminierungen in der stabilen Tabelle erhalten werden.
</p><p>Diese Rotationseliminierungen umfassen Phase 2 des Irving-Algorithmus.
</p><p>Gemäß 2 gibt es einen Match, wenn jede reduzierte Liste der Phase-1-Tabelle genau ein Individuum enthält.
</p><p>Andernfalls tritt der Algorithmus in Phase 2 ein. Eine <i>Rotation</i> in einer stabilen Tabelle <i>T</i> ist definiert als eine Folge (<i>x</i><sub>0</sub>, <i>y</i><sub>0</sub>), (<i>x</i><sub>1</sub>, <i>y</i><sub>1</sub>), …, (<i>x</i><sub>k-1</sub>, <i>y</i><sub>k-1</sub>) mit paarweise verschiedenen
<i>x</i><sub>i</sub> und der Bedingung, dass <i>y</i><sub>i</sub> an erster Stelle auf der reduzierten Liste von <i>x</i><sub>i</sub> steht (oder <i>x</i><sub>i</sub> ist an letzter Stelle auf <i>y</i><sub>i</sub>'s reduzierter Liste) und <i>y</i><sub>i+1</sub> an zweiter Stelle auf <i>x</i><sub>i</sub>'s reduzierter Liste steht für i = 0, …, k-1, wobei die Indizes modulo k genommen werden. Daraus folgt, dass in einer stabilen Tabelle mit einer reduzierten Liste, die mindestens zwei Individuen enthält, eine solche Rotation immer existiert. Um sie zu finden, beginne bei einem <i>p</i><sub>0</sub>, mit mindestens zwei Individuen in ihrer reduzierten Liste und definiere rekursiv <i>q</i><sub>i+1</sub> als die Person an zweiter Stelle auf der Liste von <i>p</i><sub>i</sub> und <i>p</i><sub>i+1</sub> als die Person an letzter Stelle auf der Liste von <i>q</i><sub>i+1</sub>, bis diese Sequenz irgendein <i>p</i><sub>j</sub> wiederholt, womit eine Rotation gefunden ist: es ist die Folge von Paaren, die bei dem ersten Vorkommen von (<i>p</i><sub>j</sub>, <i>q</i><sub>j</sub>) beginnt und bei dem Paar vor dem letzten Vorkommen endet. Die Sequenz von <i>p</i><sub>i</sub> bis zu <i>p</i><sub>j</sub> wird als das <i>Ende</i> der Rotation bezeichnet. Die Tatsache, dass diese Suche in einer stabilen Tabelle stattfindet, garantiert, dass jeder <i>p</i><sub>i</sub> mindestens zwei Personen auf seiner Liste hat.
</p><p>Um die Rotation zu eliminieren, weist <i>y</i><sub>i</sub> <i>x</i><sub>i</sub> zurück, sodass <i>x</i><sub>i</sub> <i>y</i><sub>i+1</sub> einen Antrag macht; das gilt für jedes <i>i</i>. Um die stabilen Tabelleneigenschaften (i) und (ii) wiederherzustellen, werden für jedes <i>i</i> alle Nachfolger von <i>x</i><sub>i-1</sub> aus der Liste von <i>y</i><sub>i</sub> entfernt, und <i>y</i><sub>i</sub> wird aus ihren Listen entfernt. Wenn eine reduzierte Liste während dieser Entfernung leer wird, gibt es kein stabiles Matching. Andernfalls ist die neue Tabelle wieder eine stabile Tabelle und gibt entweder bereits ein Matching an, da jede Liste genau eine Person enthält, oder es kann eine weitere Rotation gefunden und eliminiert werden, sodass dieser Schritt wiederholt wird.
</p><p>Phase 2 des Algorithmus kann nun wie folgt zusammengefasst werden:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="n">T</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Phase</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="n">Tabelle</span><span class="p">;</span>
<span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="kc">true</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">identifiziere</span><span class="w"> </span><span class="n">eine</span><span class="w"> </span><span class="n">Rotation</span><span class="w"> </span><span class="n">r</span><span class="w"> </span><span class="n">in</span><span class="w"> </span><span class="n">T</span><span class="p">;</span>
<span class="w"> </span><span class="n">eliminiere</span><span class="w"> </span><span class="n">r</span><span class="w"> </span><span class="n">aus</span><span class="w"> </span><span class="n">T</span><span class="p">;</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">eine</span><span class="w"> </span><span class="n">Liste</span><span class="w"> </span><span class="n">in</span><span class="w"> </span><span class="n">T</span><span class="w"> </span><span class="n">leer</span><span class="w"> </span><span class="n">wird</span><span class="p">,</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">null</span><span class="p">;</span><span class="w"> </span><span class="p">(</span><span class="n">kein</span><span class="w"> </span><span class="n">stabiles</span><span class="w"> </span><span class="n">Matching</span><span class="w"> </span><span class="n">kann</span><span class="w"> </span><span class="n">existieren</span><span class="p">)</span>
<span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">jede</span><span class="w"> </span><span class="n">reduzierte</span><span class="w"> </span><span class="n">Liste</span><span class="w"> </span><span class="n">in</span><span class="w"> </span><span class="n">T</span><span class="w"> </span><span class="n">hat</span><span class="w"> </span><span class="n">die</span><span class="w"> </span><span class="n">Größe</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">das</span><span class="w"> </span><span class="n">Matching</span><span class="w"> </span><span class="n">M</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{{</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">y</span><span class="p">}</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="n">und</span><span class="w"> </span><span class="n">y</span><span class="w"> </span><span class="n">sind</span><span class="w"> </span><span class="n">auf</span><span class="w"> </span><span class="n">des</span><span class="w"> </span><span class="n">anderen</span><span class="w"> </span><span class="n">Liste</span><span class="w"> </span><span class="n">in</span><span class="w"> </span><span class="n">T</span><span class="p">};</span><span class="w"> </span><span class="p">(</span><span class="n">das</span><span class="w"> </span><span class="n">ist</span><span class="w"> </span><span class="n">ein</span><span class="w"> </span><span class="n">stabiles</span><span class="w"> </span><span class="n">Matching</span><span class="p">)</span>
<span class="p">}</span>
</pre></div>
<p>Um eine O(<i>n</i><sup>2</sup>)-Laufzeit zu erreichen, eine Rangordnungsmatrix, deren Eintrag in Zeile <i>i</i> und Spalte <i>j</i> die Position des <i>j</i>-ten Individuums in der <i>i</i>-ten Liste ist; das dauert O(<i>n</i><sup>2</sup>) lang. Mit der Rangordnungsmatrix kann in konstanten Zeitabständen überprüft werden, ob eine Person eine andere bevorzugt, indem sie ihre Ränge in der Matrix vergleichen. Außerdem, anstatt Elemente aus den Präferenzlisten explizit zu entfernen, werden die Indizes des ersten, zweiten und letzten auf der reduzierten Liste jeder Person beibehalten. Die erste Person, die <i>nicht gematcht</i> ist, d.&nbsp;h. mindestens zwei in ihrer reduzierten Liste hat, wird ebenfalls beibehalten. Dann wird in Phase 2 die Sequenz von <i>p</i><sub>i</sub> "durchlaufen", um herauszufinden, dass eine Rotation in einer Liste gespeichert ist und es wird ein Array verwendet, um Individuen als besucht zu markieren, wie in einer standardmäßigen Tiefensuche Graph-Traversierung. Nach der Eliminierung einer Rotation speichern wir weiterhin nur ihr Ende, falls vorhanden, in der Liste und wie im Array besucht. Und beginnen dann die Suche nach der nächsten Rotation bei der letzten Person am Ende und ansonsten bei der nächsten nicht gemachten Person, wenn es kein Ende gibt. Dies reduziert das wiederholte Überqueren des Endes, da es durch die Entfernung der Rotation weitgehend unbeeinflusst bleibt.
</p>
<div class="mw-heading mw-heading3"><h3 id="Beispiel">Beispiel</h3></div>
<p>Im Folgenden sind die Präferenzlisten für ein Beispiel des Stable Roommate Problems mit 6 Teilnehmern aufgeführt: 1, 2, 3, 4, 5, 6.
</p><p>1&nbsp;: &nbsp; 3 &nbsp; 4 &nbsp; 2 &nbsp; 6 &nbsp; 5<br>
2&nbsp;: &nbsp; 6 &nbsp; 5 &nbsp; 4 &nbsp; 1 &nbsp; 3<br>
3&nbsp;: &nbsp; 2 &nbsp; 4 &nbsp; 5 &nbsp; 1 &nbsp; 6<br>
4&nbsp;: &nbsp; 5 &nbsp; 2 &nbsp; 3 &nbsp; 6 &nbsp; 1<br>
5&nbsp;: &nbsp; 3 &nbsp; 1 &nbsp; 2 &nbsp; 4 &nbsp; 6<br>
6&nbsp;: &nbsp; 5 &nbsp; 1 &nbsp; 3 &nbsp; 4 &nbsp; 2
</p><p>Eine mögliche Ausführung von Phase 1 besteht aus der folgenden Abfolge von Anträgen und Ablehnungen, wobei → <i>macht Antrag</i> repräsentiert und&nbsp;×&nbsp;<i>lehnt ab</i> darstellt.
</p><p>1 → 3<br>
2 → 6<br>
3 → 2<br>
4 → 5<br>
5 → 3; &nbsp; 3&nbsp;×&nbsp;1<br>
1 → 4<br>
6 → 5; &nbsp; 5&nbsp;×&nbsp;6<br>
6 → 1
</p><p>So endet Phase 1 mit den folgenden reduzierten Präferenzlisten:
</p><p>1&nbsp;: &nbsp; <s style="color:#808080">3</s> &nbsp; 4 &nbsp; 2 &nbsp; 6 &nbsp; <s style="color:#808080">5</s><br>
2&nbsp;: &nbsp; 6 &nbsp; 5 &nbsp; 4 &nbsp; 1 &nbsp; 3<br>
3&nbsp;: &nbsp; 2 &nbsp; 4 &nbsp; 5 &nbsp; <s style="color:#808080">1</s> &nbsp; <s style="color:#808080">6</s><br>
4&nbsp;: &nbsp; 5 &nbsp; 2 &nbsp; 3 &nbsp; 6 &nbsp; 1<br>
5&nbsp;: &nbsp; 3 &nbsp; <s style="color:#808080">1</s> &nbsp; 2 &nbsp; 4 &nbsp; <s style="color:#808080">6</s><br>
6&nbsp;: &nbsp; <s style="color:#808080">5</s> &nbsp; 1 &nbsp; <s style="color:#808080">3</s> &nbsp; 4 &nbsp; 2
</p><p>In Phase 2 wird zuerst die Rotation <i>r</i><sub>1</sub> = (1,4), (3,2) identifiziert. Dies liegt daran, dass 2 der zweite Favorit von 1 ist und 4 der zweite Favorit von 3 ist. Das Eliminieren von <i>r</i><sub>1</sub> ergibt:
</p><p>1&nbsp;: &nbsp; <s style="color:#808080">3</s> &nbsp; <s style="color:#808080">4</s> &nbsp; 2 &nbsp; 6 &nbsp; <s style="color:#808080">5</s><br>
2&nbsp;: &nbsp; 6 &nbsp; 5 &nbsp; 4 &nbsp; 1 &nbsp; <s style="color:#808080">3</s><br>
3&nbsp;: &nbsp; <s style="color:#808080">2</s> &nbsp; 4 &nbsp; 5 &nbsp; <s style="color:#808080">1</s> &nbsp; <s style="color:#808080">6</s><br>
4&nbsp;: &nbsp; 5 &nbsp; 2 &nbsp; 3 &nbsp; <s style="color:#808080">6</s> &nbsp; <s style="color:#808080">1</s><br>
5&nbsp;: &nbsp; 3 &nbsp; <s style="color:#808080">1</s> &nbsp; 2 &nbsp; 4 &nbsp; <s style="color:#808080">6</s><br>
6&nbsp;: &nbsp; <s style="color:#808080">5</s> &nbsp; 1 &nbsp; <s style="color:#808080">3</s> &nbsp; <s style="color:#808080">4</s> &nbsp; 2
</p><p>Als nächstes wird die Rotation <i>r</i><sub>2</sub> = (1,2), (2,6), (4,5) identifiziert, und ihre Eliminierung ergibt:
</p><p>1&nbsp;: &nbsp; <s style="color:#808080">3</s> &nbsp; <s style="color:#808080">4</s> &nbsp; <s style="color:#808080">2</s> &nbsp; 6 &nbsp; <s style="color:#808080">5</s><br>
2&nbsp;: &nbsp; <s style="color:#808080">6</s> &nbsp; 5 &nbsp; 4 &nbsp; <s style="color:#808080">1</s> &nbsp; <s style="color:#808080">3</s><br>
3&nbsp;: &nbsp; <s style="color:#808080">2</s> &nbsp; 4 &nbsp; 5 &nbsp; <s style="color:#808080">1</s> &nbsp; <s style="color:#808080">6</s><br>
4&nbsp;: &nbsp; <s style="color:#808080">5</s> &nbsp; 2 &nbsp; 3 &nbsp; <s style="color:#808080">6</s> &nbsp; <s style="color:#808080">1</s><br>
5&nbsp;: &nbsp; 3 &nbsp; <s style="color:#808080">1</s> &nbsp; 2 &nbsp; <s style="color:#808080">4</s> &nbsp; <s style="color:#808080">6</s><br>
6&nbsp;: &nbsp; <s style="color:#808080">5</s> &nbsp; 1 &nbsp; <s style="color:#808080">3</s> &nbsp; <s style="color:#808080">4</s> &nbsp; <s style="color:#808080">2</s>
</p><p>Daher sind 1 und 6 gematcht. Schließlich wird die Rotation <i>r</i><sub>3</sub> = (2,5), (3,4) identifiziert, und ihre Eliminierung ergibt:
</p><p>1&nbsp;: &nbsp; <s style="color:#808080">3</s> &nbsp; <s style="color:#808080">4</s> &nbsp; <s style="color:#808080">2</s> &nbsp; 6 &nbsp; <s style="color:#808080">5</s><br>
2&nbsp;: &nbsp; <s style="color:#808080">6</s> &nbsp; <s style="color:#808080">5</s> &nbsp; 4 &nbsp; <s style="color:#808080">1</s> &nbsp; <s style="color:#808080">3</s><br>
3&nbsp;: &nbsp; <s style="color:#808080">2</s> &nbsp; <s style="color:#808080">4</s> &nbsp; 5 &nbsp; <s style="color:#808080">1</s> &nbsp; <s style="color:#808080">6</s><br>
4&nbsp;: &nbsp; <s style="color:#808080">5</s> &nbsp; 2 &nbsp; <s style="color:#808080">3</s> &nbsp; <s style="color:#808080">6</s> &nbsp; <s style="color:#808080">1</s><br>
5&nbsp;: &nbsp; 3 &nbsp; <s style="color:#808080">1</s> &nbsp; <s style="color:#808080">2</s> &nbsp; <s style="color:#808080">4</s> &nbsp; <s style="color:#808080">6</s><br>
6&nbsp;: &nbsp; <s style="color:#808080">5</s> &nbsp; 1 &nbsp; <s style="color:#808080">3</s> &nbsp; <s style="color:#808080">4</s> &nbsp; <s style="color:#808080">2</s>
</p><p>Daher ist das Matching {{1, 6}, {2,4}, {3, 5}} stabil.
</p>
<div class="mw-heading mw-heading2"><h2 id="Implementierung_in_Softwarepaketen">Implementierung in Softwarepaketen</h2></div>
<ul><li><a href="Java_(Programmiersprache)" title="Java (Programmiersprache)">Java</a>: Ein Constraint-Programmiermodell, um alle stabilen Matchings im Stable Roommates Problem mit unvollständigen Listen zu finden, ist unter der CRAPL-Lizenz verfügbar.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup></li>
<li><a href="R_(Programmiersprache)" title="R (Programmiersprache)">R</a>: Das Constraint-Programmiermodell ist auch als Teil des R Pakets <code>matchingMarkets</code> verfügbar.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup></li>
<li><a href="Programmierschnittstelle" title="Programmierschnittstelle">API</a>: Die MatchingTools API stellt den Algorithmus über eine freie Programmierschnittstelle zur Verfügung.<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Literatur">Literatur</h2></div>
<ul><li>Tamás Fleiner, Robert W. Irving, David F. Manlove: <cite style="font-style:italic">An efficient algorithm for the "stable roommates" problem</cite>. In: <cite style="font-style:italic">Theoretical Computer Science</cite>. 381. Jahrgang, <span style="white-space:nowrap">Nr.<span style="display:inline-block;width:.2em">&nbsp;</span>1-3</span>, 2007, <span style="white-space:nowrap">S.<span style="display:inline-block;width:.2em">&nbsp;</span>162–176</span>, <a href="Digital_Object_Identifier" title="Digital Object Identifier">doi</a>:<span class="uri-handle" style="white-space:nowrap"><a rel="nofollow" class="external text" href="https://doi.org/10.1016/j.tcs.2007.04.029">10.1016/j.tcs.2007.04.029</a></span>.<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rfr_id=info:sid/de.wikipedia.org:Stable+Roommates+Problem&amp;rft.atitle=An+efficient+algorithm+for+the+%22stable+roommates%22+problem&amp;rft.au=Tam%C3%A1s%26%2332%3BFleiner%2C%26%2332%3BRobert+W.%26%2332%3BIrving%2C%26%2332%3BDavid+F.%26%2332%3BManlove&amp;rft.date=2007&amp;rft.doi=10.1016%2Fj.tcs.2007.04.029&amp;rft.genre=journal&amp;rft.issue=1-3&amp;rft.jtitle=Theoretical+Computer+Science&amp;rft.pages=162-176&amp;rft.volume=381.+Jahrgang" style="display:none">&nbsp;</span></li>
<li>Daniel M. Gusfield, Robert W. Irving: <cite style="font-style:italic">The Stable Marriage Problem: Structure and Algorithms</cite>. In: <cite style="font-style:italic">MIT Press</cite>. 1989.<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Stable+Roommates+Problem&amp;rft.atitle=The+Stable+Marriage+Problem%3A+Structure+and+Algorithms&amp;rft.au=Daniel+M.%26%2332%3BGusfield%2C%26%2332%3BRobert+W.%26%2332%3BIrving&amp;rft.btitle=MIT+Press&amp;rft.date=1989&amp;rft.genre=book" style="display:none">&nbsp;</span></li>
<li>Robert W. Irving, David F. Manlove: <cite style="font-style:italic">The Stable Roommates Problem with Ties</cite>. In: <cite style="font-style:italic">Journal of Algorithms</cite>. 43. Jahrgang, <span style="white-space:nowrap">Nr.<span style="display:inline-block;width:.2em">&nbsp;</span>1</span>, 2002, <span style="white-space:nowrap">S.<span style="display:inline-block;width:.2em">&nbsp;</span>85–105</span>, <a href="Digital_Object_Identifier" title="Digital Object Identifier">doi</a>:<span class="uri-handle" style="white-space:nowrap"><a rel="nofollow" class="external text" href="https://doi.org/10.1006/jagm.2002.1219">10.1006/jagm.2002.1219</a></span> (<a rel="nofollow" class="external text" href="http://eprints.gla.ac.uk/11/01/SRT.pdf">gla.ac.uk</a> [PDF]).<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rfr_id=info:sid/de.wikipedia.org:Stable+Roommates+Problem&amp;rft.atitle=The+Stable+Roommates+Problem+with+Ties&amp;rft.au=Robert+W.%26%2332%3BIrving%2C%26%2332%3BDavid+F.%26%2332%3BManlove&amp;rft.date=2002&amp;rft.doi=10.1006%2Fjagm.2002.1219&amp;rft.genre=journal&amp;rft.issue=1&amp;rft.jtitle=Journal+of+Algorithms&amp;rft.pages=85-105&amp;rft.volume=43.+Jahrgang" style="display:none">&nbsp;</span></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text">Robert W. Irving: <cite style="font-style:italic">An efficient algorithm for the "stable roommates" problem</cite>. In: <cite style="font-style:italic">Journal of Algorithms</cite>. 6. Jahrgang, <span style="white-space:nowrap">Nr.<span style="display:inline-block;width:.2em">&nbsp;</span>4</span>, 1985, <span style="white-space:nowrap">S.<span style="display:inline-block;width:.2em">&nbsp;</span>577–595</span>, <a href="Digital_Object_Identifier" title="Digital Object Identifier">doi</a>:<span class="uri-handle" style="white-space:nowrap"><a rel="nofollow" class="external text" href="https://doi.org/10.1016/0196-6774%2885%2990033-1">10.1016/0196-6774(85)90033-1</a></span>.<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rfr_id=info:sid/de.wikipedia.org:Stable+Roommates+Problem&amp;rft.atitle=An+efficient+algorithm+for+the+%22stable+roommates%22+problem&amp;rft.au=Robert+W.%26%2332%3BIrving&amp;rft.date=1985&amp;rft.doi=10.1016%2F0196-6774%2885%2990033-1&amp;rft.genre=journal&amp;rft.issue=4&amp;rft.jtitle=Journal+of+Algorithms&amp;rft.pages=577-595&amp;rft.volume=6.+Jahrgang" style="display:none">&nbsp;</span></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text">P. Prosser: <cite style="font-style:italic">Stable Roommates and Constraint Programming</cite>. In: <cite style="font-style:italic">Lecture Notes in Computer Science, CPAIOR 2014 Edition, Springer International Publishing</cite>. 8451. Jahrgang, 2014, <span style="white-space:nowrap">S.<span style="display:inline-block;width:.2em">&nbsp;</span>15–28</span> (<a rel="nofollow" class="external text" href="http://www.dcs.gla.ac.uk/~pat/roommates/distribution/papers/cpaior2014.pdf">gla.ac.uk</a> [PDF]).<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Stable+Roommates+Problem&amp;rft.atitle=Stable+Roommates+and+Constraint+Programming&amp;rft.au=P.%26%2332%3BProsser&amp;rft.btitle=Lecture+Notes+in+Computer+Science%2C+CPAIOR+2014+Edition%2C+Springer+International+Publishing&amp;rft.date=2014&amp;rft.genre=book&amp;rft.pages=15-28&amp;rft.volume=8451.+Jahrgang" style="display:none">&nbsp;</span></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="http://www.dcs.gla.ac.uk/~pat/roommates/distribution/"><i>Constraint encoding for stable roommates problem.</i></a> In: <i>Java release.</i><span class="Abrufdatum" style="display:none"> Abgerufen im 1.&nbsp;Januar 1</span></span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AStable+Roommates+Problem&amp;rft.title=Constraint+encoding+for+stable+roommates+problem&amp;rft.description=Constraint+encoding+for+stable+roommates+problem&amp;rft.identifier=&amp;rft.date=">&nbsp;</span></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><a href="#cite_ref-4">↑</a></span> <span class="reference-text">Thilo Klein: <cite style="font-style:italic">Analysis of Stable Matchings in R: Package matchingMarkets</cite>. In: <cite style="font-style:italic">Vignette to R Package matchingMarkets</cite>. 2015 (<a rel="nofollow" class="external text" href="http://cran.at.r-project.org/web/packages/matchingMarkets/vignettes/matching.pdf">r-project.org</a> [PDF]).<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Stable+Roommates+Problem&amp;rft.atitle=Analysis+of+Stable+Matchings+in+R%3A+Package+matchingMarkets&amp;rft.au=Thilo%26%2332%3BKlein&amp;rft.btitle=Vignette+to+R+Package+matchingMarkets&amp;rft.date=2015&amp;rft.genre=book" style="display:none">&nbsp;</span></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><a href="#cite_ref-5">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="http://cran.at.r-project.org/web/packages/matchingMarkets/index.html"><i>matchingMarkets: Analysis of Stable Matchings.</i></a> In: <i>R Project.</i><span class="Abrufdatum" style="display:none"> Abgerufen im 1.&nbsp;Januar 1</span></span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AStable+Roommates+Problem&amp;rft.title=matchingMarkets%3A+Analysis+of+Stable+Matchings&amp;rft.description=matchingMarkets%3A+Analysis+of+Stable+Matchings&amp;rft.identifier=&amp;rft.date=">&nbsp;</span></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><a href="#cite_ref-6">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://matchingtools.com/"><i>MatchingTools API.</i></a><span class="Abrufdatum" style="display:none"> Abgerufen im 1.&nbsp;Januar 1</span></span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AStable+Roommates+Problem&amp;rft.title=MatchingTools+API&amp;rft.description=MatchingTools+API&amp;rft.identifier=&amp;rft.date=">&nbsp;</span></span>
</li>
</ol></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2024-03-18" href="https://de.wikipedia.org/wiki/?title=Stable_Roommates_Problem&amp;oldid=243217078">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>